package model.dominio;

import java.util.ArrayList;
import utilitario.ValidaException;
import java.util.HashMap;
import model.dao.DaoTipoVeiculo;

public class Veiculo {

    private Integer codigo = 0;
    private String placa;
    private String marca;
    private String modelo;
    private String cor;
    private TipoVeiculo tipo;
    private String opcionais;
    private String observacoes;
    private boolean disponivel;
    private ArrayList<Locacao> locacoes;

    public String getPlaca() {
        return this.placa;
    }

    public Veiculo(String placa, String marca, String modelo) {
        this.placa = placa;
        this.marca = marca;
        this.modelo = modelo;
    }

    public Veiculo(String placa, String marca, String modelo, String cor,
            String tipo, String opcionais, String observacoes) {
        this(placa, marca, modelo);
        this.cor = cor;
        this.tipo = DaoTipoVeiculo.buscarTipoVeiculo(Integer.parseInt(tipo));
        this.opcionais = opcionais;
        this.observacoes = observacoes;
    }

    @Override
    public String toString() {
        String x = "";
        if (this.codigo > 0) {
            x += "<codigo=" + String.format("%06d", this.codigo) + ">";
        }
        x += "<placa=" + this.getPlaca() + ">,<marca=" + this.marca + ">,<modelo=" + this.modelo + ">,<cor=" + this.cor + ">,<tipo=" + this.tipo.getCodigo() + ">,<opcionais=" + this.opcionais + ">,<observacoes=" + this.observacoes + ">";

        return x;

    }

    public Integer getCodigo() {
        return codigo;
    }

    public String getMarca() {
        return marca;
    }

    public String getModelo() {
        return modelo;
    }

    public String getCor() {
        return cor;
    }

    public TipoVeiculo getTipo() {
        return tipo;
    }

    public String getOpcionais() {
        return opcionais;
    }

    public String getObservacoes() {
        return observacoes;
    }

    public static Veiculo stringToObject(String dados) throws ValidaException {
        if (!dados.isEmpty()) {
            dados = dados.substring(1, dados.length() - 1);
            String aux[] = dados.split(">,<"), aux2[];
            HashMap<String, String> c = new HashMap<String, String>();
            for (int i = 0; i < aux.length; i++) {
                aux2 = aux[i].split("=");
                c.put(aux2[0], aux2[1]);
            }
            Veiculo veiculo = new Veiculo(c.get("placa"), c.get("marca"), c.get("modelo"), c.get("cor"), c.get("tipo"), c.get("opcionais"), c.get("observacoes"));
            veiculo.setCodigo(Integer.parseInt(c.get("codigo")));
            return veiculo;
        } else {
            throw new ValidaException("O veículo não existe, busque novamente");
        }

    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(Integer codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the disponivel
     */
    public boolean isDisponivel() {
        return disponivel;
    }

    /**
     * @param disponivel the disponivel to set
     */
    public void setDisponivel(boolean disponivel) {
        this.disponivel = disponivel;
    }

    /**
     * @return the locacoes
     */
    public ArrayList<Locacao> getLocacoes() {
        return locacoes;
    }

    /**
     * @param locacoes the locacoes to set
     */
    public void setLocacoes(ArrayList<Locacao> locacoes) {
        this.locacoes = locacoes;
    }
}